#include"menu.h"


//cette fonction permet de colorer le console
void Color(int t,int f)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(H,f*16+t);
}

void tour_coupJoue_vertical_haut(Pion grille[8][8],int joueur,Coord c)
{
    int i=(c.abs)+1,j=(c.ord);

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i++;
    }

}
void tour_coupJoue_vertical_bas(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs)-1,j=(c.ord);

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i--;
    }
}
void tour_coupJoue_horizontal_gauche(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs),j=(c.ord)+1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        j++;
    }
}
void tour_coupJoue_horizontal_droite(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs),j=(c.ord)-1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;

        j--;
    }
}

void tour_coupJoue_diag_haut_gauche(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs)+1,j=(c.ord)+1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i++;
        j++;
    }
}
void tour_coupJoue_diag_bas_droite(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs)-1,j=(c.ord)-1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i--;
        j--;
    }

}
void tour_coupJoue_diag_haut_droite(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs)+1,j=(c.ord)-1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i++;
        j--;
    }
}
void tour_coupJoue_diag_bas_gauche(Pion grille[8][8], int joueur, Coord c)
{
    int i=(c.abs)-1,j=(c.ord)+1;

    while(grille[i][j].couleur==grille_joueurOpp(joueur))
    {
        grille[i][j].couleur=joueur;
        i--;
        j++;
    }
}
void tour_executerCoup(Pion grille[8][8],int joueur,Coord c)
{
    grille[c.abs][c.ord].couleur=joueur;
    grille[c.abs][c.ord].existe=1;
    if (grille_coupPossible_vertical_haut(grille,joueur,c)==1)
        tour_coupJoue_vertical_haut(grille,joueur,c);
    if (grille_coupPossible_vertical_bas(grille,joueur,c)==1)
        tour_coupJoue_vertical_bas(grille,joueur,c);
    if (grille_coupPossible_horizontal_gauche(grille,joueur,c)==1)
        tour_coupJoue_horizontal_gauche(grille,joueur,c);
    if(grille_coupPossible_horizontal_droite(grille,joueur,c)==1)
        tour_coupJoue_horizontal_droite(grille,joueur,c);
    if(grille_coupPossible_diag_haut_gauche(grille,joueur,c)==1)
        tour_coupJoue_diag_haut_gauche(grille,joueur,c);
    if(grille_coupPossible_diag_bas_droite(grille,joueur,c)==1)
        tour_coupJoue_diag_bas_droite(grille,joueur,c);
    if(grille_coupPossible_diag_haut_droite(grille,joueur,c)==1)
        tour_coupJoue_diag_haut_droite(grille,joueur,c);
    if(grille_coupPossible_diag_bas_gauche(grille,joueur,c)==1)
        tour_coupJoue_diag_bas_gauche(grille,joueur,c);
}
int tour_joueurGagnant(Pion grille[8][8])
{
    int i,j,b=0,n=0,a=0;
    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            if(grille[i][j].couleur==BLANC)
                b++;
            else n++;
        }
    }
    if(b>n)
        a=BLANC;
    else if (b<n) a=NOIR;
    else if(b==n) a=4;
return a;
}
void tour_verif_case(char ch[10],int * a,int *p,Pion grille[8][8])
{
    char m=ch[0];
    switch (m)
    {
    case'0':
        *a=0;
        *p=1;
        break;
    case'1':
        *a=1;
        *p=1;
        break;
    case'2':
        *a=2;
        *p=1;
        break;
    case'3':
        *a=3;
        *p=1;
        break;
    case'4':
        *a=4;
        *p=1;
        break;
    case'5':
        *a=5;
        *p=1;
        break;
    case'6':
        *a=6;
        *p=1;
        break;
    case'7':
        *a=7;
        *p=1;
        break;

        case'Q': menu_quitter(grille);
                 *p=2;
                 break;
        case'q': menu_quitter(grille);
                 *p=2;
                 break;
   //____________________________isertion sauvegarde

    default :
        printf("\n\tMauvais choix !\n");
        *p=-1;
    }

}
int tour_coupPossible(Pion grille[8][8],int joueur)
{   int a=0;
    Coord d;
    d.abs = 0;
    d.ord = 0;

   for(d.abs=0;d.abs<8;d.abs++)
    {
        for(d.ord=0;d.ord<8;d.ord++)
        {

            if (grille_coupPossible(grille,joueur,d))


             a=1;





        }


        }
return a;


}
void tour_affichageGrille(Pion grille[8][8]){

  int i,j,k;
  printf("    ");
  printf("\n");
printf("\t   ");

  for(k=0;k<8;k++){
    printf("  %d ",k);
  }

    printf("\t   Blanc: %d Noir: %d", tour_affichageScores(grille,BLANC), tour_affichageScores(grille,NOIR));
printf("\n");
  printf("   ");
  printf("\n");
  printf("\t   ");




     printf("+---+---+---+---+---+---+---+---+");

    for(i=0; i<8; i++)
    {

       printf("\n\t");
    printf("  %d|",i);
        for(j=0; j<8; j++)
        {
            if(grille[i][j].existe==0){
                printf("   ");
                 printf("|",grille[i][j]);}
                 else
            if(grille[i][j].couleur==BLANC){
                printf("o  ");
                 printf("|",grille[i][j]);}
                 else
            if(grille[i][j].couleur==NOIR){
                printf("*  ");
                 printf("|",grille[i][j]);
            }
        }
        printf(" \n");
        printf("\t   +---+---+---+---+---+---+---+---+") ;
           }



    printf("\n");
    printf("\n\nPour quitter la partie tapez Q\n");
}
void tour_executerJeu(Pion grille[8][8],int joueur,int * u)
{
    int p=0,s=0;

        char ch[10],ss[10];
        Coord c;
        *u=grille_grilleRemplie(grille);
        do
        {
            tour_affichageGrille(grille);
            if((tour_coupPossible(grille,joueur)==0)&&(tour_coupPossible(grille,grille_joueurOpp(joueur))==0))
               *u=1;
            else if (tour_coupPossible(grille,joueur)==0)
            {
                printf("\tIl n\'y a pas de case jouable pour vous\n\tC\'est au tour du joueur suivant\n");
                joueur=grille_joueurOpp(joueur);

            }
            else if (tour_coupPossible(grille,joueur)==1)
            {

                do
                {
                    do
                    {
                        if(joueur==BLANC)
                            printf("\n Donnez l\'abscisse du pion blanc ");
                        else printf("\n Donnez l\'abscisse du pion noir ");
                        fflush(stdin);
                        scanf("%s",ch);
                        if(strlen(ch)==1)
                        {
                            tour_verif_case(ch,&(c.abs),&p,grille);
                          if(p==2)
                            *u=2;
                        }

                        else
                        {
                            printf("\n\tMauvais choix !\n");
                            p=-1;

                        }
                    }
                    while(p==-1);

                    if(p != 2)
                    {

                        do
                        {
                            if(joueur==BLANC)
                                printf("\n Donnez l\'ordonn%ce du pion blanc ",130);
                            else printf("\n Donnez l\'ordonn%ce du pion noir ",130);
                            fflush(stdin);
                            scanf("%s",ss);
                            if(strlen(ss)==1)
                            {
                                tour_verif_case(ss,&(c.ord),&s,grille);
                               if(s==2)
                                *u=2;
                            }

                            else
                            {
                                printf("\n\tMauvais choix !\n");
                                s=-1;

                            }
                        }while(s==-1);

                        if((*u != 2) && (grille_coupPossible(grille,joueur,c)==0))
                            printf("\tMauvaise case s%clectionn%c !\n\tEssayez encore\n",130,130);
                    }


                }
                while((*u != 2) && (grille_coupPossible(grille,joueur,c)==0));

                if(*u != 2)
                {
                    tour_executerCoup(grille,joueur,c);
                    joueur=grille_joueurOpp(joueur);
                    system("cls");
                }
            }

        }
        while(*u==0);
    }

int tour_affichageScores(Pion grille[8][8],int joueur)
{
    int k=0,i,j;
    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            if(grille[i][j].couleur==joueur)
                k++;

        }
    }
    return k;
}

void tour_jouerPartie()
{
    Pion grille[8][8];
     int joueur=NOIR, u;
    float temps;
    clock_t t1, t2;
   t1 = clock();
   grille_intitialisationGrille(grille);
    tour_executerJeu(grille,joueur,&u);


    t2 = clock();

    temps = (float)(t2-t1)/CLOCKS_PER_SEC;
 if(u!=2){
if(tour_joueurGagnant(grille)==BLANC)
    printf("\n\t\t\t\2 partie termine%c \2 \n\n\t\tF%clicitations! Le joueur gagnant est: Blanc \n",130,130);
    else if(tour_joueurGagnant(grille)==NOIR)
          printf("\n\t\t\t\2 partie termine%c \2 \n\n\t\tF%clicitations! Le joueur gagnant est: Noir \n",130,130);
     else if(tour_joueurGagnant(grille)==4)
          printf("\n\t\t\t\2 partie termine%c \2 \n\n\t\tF%clicitations! Les deux joueurs sont a %cgalit%c \n",130,130,130,130);
    printf("Temps %ccoul%c dans cette partie: %f minutes\n",130,130,temps/60);

}}

void suavgarder (char*chemin,Pion grille[8][8])
{
    FILE *F;
    int i,j;
    F=fopen(chemin,"w");
    if(F==NULL)
    {
        printf("ouverture impossible \n");

    }
    else
    {
        for(i=0; i<8; i++)
        {
            for(j=0; j<8; j++)
            {
                fprintf(F,"%d%d ", grille[i][j]);
            }printf("\n");
        }



        fclose(F);
    }
    printf("la partie est sauvgarder :) \n");
}
